home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 3: The Continuation
/
17-Bit_The_Continuation_Disc.iso
/
amigan
/
amigan 2
/
hackiconii_source
/
fontio.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-27
|
5KB
|
180 lines
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
* |_o_o|\\ Copyright (c) 1987 The Software Distillery. All Rights Reserved *
* |. o.| || Written by Doug Walker *
* | . | || The Software Distillery *
* | o | || 235 Trillingham Lane *
* | . |// Cary, NC 27511 *
* ====== BBS:(919)-471-6436 *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "mydebug.h"
#include "exec/types.h"
#include "exec/memory.h"
#include "intuition/intuition.h"
#include "stdio.h"
#include "hackicon.h"
extern struct iconfont *fonts[2];
extern struct IntuiText MiscText[];
extern int fontnum;
extern USHORT colormap[];
extern struct Window *Window;
extern struct ViewPort *ViewPort;
LoadFont(name, num)
char *name;
int num;
{
FILE *fp;
int i;
register struct Image *curimage;
register struct iconfont *ifont;
register USHORT *dataptr, *endptr;
if(name == NULL) return(1);
BUG(1, ("LoadFont: Enter, name=%s, num=%d\n", name, num))
if(num<0)
{
for(num=0; num<MAXFONTS && fonts[num]; num++);
if(num >= MAXFONTS)
{
AutoRequest(Window, &MiscText[4], NULL, &MiscText[2], 0, 0, 410, 90);
return(1);
}
}
if(fonts[num]) FreeMem(fonts[num], sizeof(struct iconfont));
fontnum = num;
if(!(ifont = fonts[num] = (struct iconfont *)
AllocMem(sizeof(struct iconfont), MEMF_CHIP | MEMF_CLEAR)))
{
AutoRequest(Window, &MiscText[3], NULL, &MiscText[2], 0, 0, 410, 90);
return(1);
}
strcpy(ifont->filename, name);
if(NULL == (fp = fopen(name, "rb")))
{
BUG(4, ("LoadFont: Null fp, initializing font.\n"))
movmem(colormap, ifont->colormap, 16*sizeof(USHORT));
ifont->firstchar = 255;
ifont->lastchar = 0;
}
else
{
BUG(4, ("LoadFont: reading color data.\n"))
for(i=0; i<16; i++)
{
colormap[i] = ifont->colormap[i] = (getc(fp) << 8) | getc(fp);
BUG(9, ("LoadFont: colormap[%d] = %4x\n", i, colormap[i]))
}
LoadRGB4(ViewPort, colormap, 16);
ifont->firstchar = getc(fp);
ifont->lastchar = getc(fp);
}
BUG(2, ("LoadFont: firstchar=%d, lastchar=%d\n",ifont->firstchar,ifont->lastchar))
for(i=0, curimage=ifont->images, dataptr = ifont->idata;
i<256;
i++, curimage++, dataptr += ILENGTH)
{
curimage->NextImage = (i < 255 ? curimage+1 : NULL);
curimage->LeftEdge = IXCALC(i);
curimage->TopEdge = IYCALC(i);
curimage->Width = IWIDTH;
curimage->Height = IHEIGHT;
curimage->Depth = IDEPTH;
curimage->ImageData = dataptr;
curimage->PlanePick = 0x0F;
curimage->PlaneOnOff = 0x00;
}
BUG(8, ("LoadFont: Done calculating image structs\n"))
if(fp)
{
for(dataptr= ifont->idata + (ILENGTH*ifont->firstchar),
endptr = ifont->idata + (ILENGTH*ifont->lastchar);
dataptr <= endptr;
dataptr += ILENGTH)
for(i=0; i<ILENGTH; i++) dataptr[i] = (getc(fp) << 8);
fclose(fp);
}
DrawImage(Window->RPort, ifont->images, 0, 0);
SetWindowTitles(Window, name, name);
BUG(1, ("LoadFont: Exit\n"))
return(0);
}
SaveFont(name)
char *name;
{
FILE *fp, *fopen();
int i, j;
unsigned char *cptr;
if(name == NULL) name = fonts[fontnum]->filename;
BUG(1, ("SaveFont: save %s as %s\n", fonts[fontnum]->filename, name))
if(!strcmp(name, fonts[fontnum]->filename)
&& !(fonts[fontnum]->flags & CHANGED) ) return(0);
if(!(fp=fopen(name, "wb")))
{
AutoRequest(Window, MiscText, NULL, &MiscText[2], 0, 0, 410, 90);
return(1);
}
for(i=0, cptr= (unsigned char *)colormap; i<16; i++)
{
putc(*(cptr++), fp);
putc(*(cptr++), fp);
}
for(i = fonts[fontnum]->firstchar; i<=fonts[fontnum]->lastchar; i++)
{
for(cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i)), j=0;
j<ILENGTH && !(*cptr);
j++, cptr++);
if(j >= ILENGTH) fonts[fontnum]->firstchar++;
else break;
}
for(i = fonts[fontnum]->lastchar; i>=fonts[fontnum]->firstchar; i--)
{
for(cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i)), j=0;
j<ILENGTH && !(*cptr);
j++, cptr++);
if(j >= ILENGTH) fonts[fontnum]->lastchar--;
else break;
}
putc(fonts[fontnum]->firstchar, fp);
putc(fonts[fontnum]->lastchar, fp);
for(i=fonts[fontnum]->firstchar,
cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i));
i<=fonts[fontnum]->lastchar;
i++)
for(j=0; j<ILENGTH; j++, cptr+=sizeof(USHORT))
putc(*cptr, fp);
fclose(fp);
fonts[fontnum]->flags &= (~CHANGED);
return(0);
}